// Package operation
// 借鉴linux权限控制，控制用户对资源的查询，修改，删除，
// 权限代码最终转换为int类型，实际已二进制整数来表示，完整的权限代码可对其他用户，同用户组用户和拥有者的权限进行限定
// 例如 100 110 111
// 100 表示其他用户对资源仅有查询权限，110 表示同用户组用户对资源有查询，修改权限， 111 表示拥有着查询，修改，删除操作。
package operation

// 权限定义
const(
	ONNER_DELETE = 1 << iota
	ONNER_WRITE
	ONNER_READ
	GROUP_DELETE
	GROUP_WRITE
	GROUP_READ
	OTHER_DELETE
	OTHER_WRITE
	OTHER_READ
)

// 用户组定义
const(
	ONNER = "ONNER"
	GROUP = "GROUP"
	OTHER = "OTHER"
)

// GenerateDefaultPermission 生成默认的权限， 000100111
func GenerateDefaultPermission() int {
	return genPermission(ONNER_READ | ONNER_WRITE | ONNER_DELETE | GROUP_READ)
}

// genPermission 根据flag生成权限代码
func genPermission(flag int) int{
	return 0|flag
}

// HasReadPermission 根据用户组检查是否具有查询权限
func HasReadPermission(group string, permission int) bool {
	switch group {
	case ONNER:
		if permission & ONNER_READ == 1 {
			return  true
		}
	case GROUP:
		if permission & GROUP_READ == 1 {
			return  true
		}
	case OTHER:
		if permission & OTHER_READ == 1 {
			return  true
		}
	default:
		return false
	}
	return false
}

// HasWritePermission 根据用户组检查是否具有修改询权限
func HasWritePermission(group string, permission int) bool {
	switch group {
	case ONNER:
		if permission & ONNER_WRITE == 1 {
			return  true
		}
	case GROUP:
		if permission & GROUP_WRITE == 1 {
			return  true
		}
	case OTHER:
		if permission & OTHER_WRITE == 1 {
			return  true
		}
	default:
		return false
	}
	return false
}

// HasDeletePermission 根据用户组检查是否具有删除权限
func HasDeletePermission(group string, permission int) bool {
	switch group {
	case ONNER:
		if permission & ONNER_DELETE == 1 {
			return  true
		}
	case GROUP:
		if permission & GROUP_DELETE == 1 {
			return  true
		}
	case OTHER:
		if permission & OTHER_DELETE == 1 {
			return  true
		}
	default:
		return false
	}
	return false
}

// GeneratePermission 自定义生成权限代码
func GeneratePermission(flag int) int {
	return 0 | flag
}